#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef int ll;
struct node{
    ll l,r,maxn;
}a[500010];
ll num[200010];
char c[5010];
ll A[5010],B[5010];
void update(ll k){
    a[k].maxn=max(a[k<<1].maxn,a[k<<1|1].maxn);
    return ;
}
void build(ll k,ll l,ll r){
    a[k].l=l;a[k].r=r;
    if(l==r){
        a[k].maxn=num[l];
        return ;
    }
    ll mid=(l+r)>>1;
    build(k<<1,l,mid);
    build(k<<1|1,mid+1,r);
    a[k].maxn=max(a[k<<1].maxn,a[k<<1|1].maxn);
    return ;
}
void change(ll k,ll pos,ll x){
    if(a[k].l==a[k].r){
        a[k].maxn=x;
        return ;
    }
    ll mid=(a[k].l+a[k].r)>>1;
    if(mid>=pos){
        change(k<<1,pos,x);
    }
    else change(k<<1|1,pos,x);
    update(k);
    return ;
}
ll query(ll k,ll l,ll r){
    if(a[k].l>=l&&a[k].r<=r){
        return a[k].maxn;
    }
    ll mid=(a[k].l+a[k].r)>>1;
    ll ans1=0,ans2=0;
    if(mid>=l){
        ans1=query(k<<1,l,r);
    }
    if(mid<r){
        ans2=query(k<<1|1,l,r);
    }
    if(ans1>ans2)return ans1;
    else return ans2;
    // if(mid<l){
    //     return query(k<<1|1,l,r);
    // }
    // if(mid>=r){
    //     return query(k<<1,l,r);
    // }
    // return max(query(k<<1,l,r),query(k<<1|1,l,r));
}
int main()
{
    IOS;
    ll n,m;
    while(cin>>n>>m){
        for(ll i=1;i<=n;i++)cin>>num[i];
        build(1,1,n);
        for(ll i=1;i<=m;i++){
            cin>>c[i]>>A[i]>>B[i];
        }
        for(ll i=1;i<=m;i++){
            if(c[i]=='U'){
                change(1,A[i],B[i]);
            }
            else {
                printf("%lld\n",query(1,A[i],B[i]));
                // if(A[i]>B[i]){
                //     cout<<query(1,B[i],A[i])<<endl;
                // }
                // else cout<<query(1,A[i],B[i])<<endl;
            }
        }
        // while(m--){
        //     cin>>c>>l>>r;
        //     if(c=='U'){
        //         change(1,l,r);
        //     }
        //     else {
        //         if(l>r)swap(l,r);
        //         cout<<query(1,l,r)<<endl
        //     }
        // }
    }
    getchar();
    getchar();
    return 0;
}
